package com.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/*
    Stream流的中间操作方法
        -操作后返回Stream对象，可以继续操作
        Stream<T> filter(Predicate<? super T> predicate)用于对流中的数据进行过
        Stream<T> limit(long maxSize)获取前几个元素
        Stream<T> skip(long n)跳过前几个元素
        Stream<T> distinct()去除流中重复的元素依赖(hashCode 和 equals方法)
        static<T> Stream<T> concat(Stream a，Stream b)合并a和b两个流为一个流

 */

/*
    Straem流总结操作
        forEach 遍历
        count   返回元素个数
 */

/*
    Straem流的收集操作
        collect(Collectors.toList())
        collect(Collectors.toSet())
        collect(Collectors.toMap())
 */

public class StreamDemo {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        list.add("张五级");
        list.add("张五");
        list.add("张大级");
        list.add("张讲课");
        list.add("刘志峰");
        list.add("缓解了");
        // 集合获取 Stream
        list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));

        // 数组获取 Stram 流对象
        int[] arr=new int[]{1,2,4,7};
        Arrays.stream(arr).forEach(s-> System.out.println(s));

        // 零散数据获取 Stream 流对象
        Stream.of(1,2,3,4,5,6).forEach(s-> System.out.println(s));




    }

    // 筛选3个字，张开头
    private static void method(List<String> list) {
        List<String> list1=new ArrayList<>();
        for (String s : list) {
            if(s.startsWith("张")){
                list1.add(s);
            }
        }
        List<String> list2=new ArrayList<>();
        for (String s : list1) {
            if(s.length()==3){
                list2.add(s);
            }
        }
        for (String s : list2) {
            System.out.println(s);
        }
    }
}
